Cloud computing allows an enterprise to access large amounts of computing resources. One technology underlying cloud computing is virtualization. Virtualization technology allows a physical computing server to host multiple virtual machine instances, each of which executes as an independent computing system with virtual hardware components, such as a CPU and memory, managed by an operating system. Once launched, an enterprise can run applications on a virtual machine instance in the same manner as applications running on a physical computing system or server used by the enterprise. Because additional virtual machine instances can be launched on demand, cloud computing allows an enterprise to obtain computing resources as needed without having to invest and maintain an underlying physical computing infrastructure.
In addition to compute services (e.g., virtual machine instances), cloud computing providers frequently offer a variety of other computing resources and services to enterprise customers. For example, a service provider may offer database services, persistent storage services, networking services, load balancing, auto-scaling, messaging services, cloud formation services, monitoring services etc., as part of a cloud based services offering. Enterprises can use these cloud-based services to deploy software applications and services which are hosted on the service-provider cloud. Of course, an enterprise can also host applications and services on physical computing systems controlled by the enterprise.
In order to push an application update into production, enterprises sometimes use a deployment pipeline. Generally, a deployment pipeline automates the processes of building, testing, and deploying an updated version of application each time a new version of the application is available (e.g., when a production branch of the application source code is committed to a version control system). Of course, deployment pipelines can also perform an initial deployment of an application into production use. Deployment pipelines allow an enterprise to manage the deployment process, while rapidly and reliably delivering new features and updates.
In practice, deployment pipelines typically specify a sequence of testing stages used to push an updated application into production service (e.g., stages for unit tests, integration tests, followed by stages for beta testing, one-box production testing, and lastly, full production deployment stages). Provided the testing at each stage is successful, the updated application is pushed into increasingly broader production environments until the deployment is complete. If a new version of an application being pushed into production fails an approval requirement or otherwise proves to be disruptive, the application is restored to a prior state. Depending on the testing requirements specified for a given stage, the deployment process can take minutes, hours, or even days to complete.